const express = require('express');
const moment = require('moment');
const router = express.Router();
const multer = require('multer');
const db = require("../db");

// promise的封装
function fn(sqlStr, data) {
  return new Promise(function(resolve, reject) {
    db(sqlStr, data, function(err, arr) {
      if (err != null) {
        reject(err);
      }
      // 
      else {
        resolve(arr);
      }
    });
  });
}




// ***********************************************multer语法：
//   1.配置前端传递过来的文件，保存在哪个文件夹路径地址：
//     不是从article.js当前路径算的，从app.js这个文件所在路径
const upload = multer({ dest: 'uploads/' });

//   2.使用formData编码格式，添加中间件用法!
//     upload.single('cover_img') 解析前端cover_img参数名后面值解析为一个文件
//     文件名：重命名，保证名字不重复不覆盖
//     没有后缀：需要自己加
//     req对象上：设置属性，某个就是文件名
router.post("/add", upload.single('cover_img'), async function(req, res) {



  // 1.获取数据：请求体 需要模块 multer
  req.body.cover_img = req.file.filename;
  req.body.pub_date = moment().format(' YYYY-MM-DD hh:mm:ss');
  req.body.author_id = req.user.userId;




  // ************************************************************* 优化2：async await优化
  try {
    let arr = await fn(`select name from category where Id=?`, req.body.cate_id);
    req.body.cate_name = arr[0].name;
    await fn(`insert into article set ?`, req.body);
    res.send({
      "status": 0,
      "message": "新增文章成功！",
    });

  } catch (err) {
    res.send({
      "status": 1,
      "message": "新增文章失败！",
    });
  }





  // ************************************************************** 优化1：promise then方式
  //   fn(`select name from category where Id=?`, req.body.cate_id)
  //     .then(function(arr) {
  //       req.body.cate_name = arr[0].name;
  //       return fn(`insert into article set ?`, req.body);
  //     })
  //     .then(function(result) {
  //       res.send({
  //         "status": 0,
  //         "message": "新增文章成功！",
  //       });
  //     })
  //     .catch(function(err) {
  //       console.log(err);
  //       res.send({
  //         "status": 1,
  //         "message": "新增文章失败！",
  //       });
  //     });





  // 常规：需要拿分类id 查询分类名称；************************************************回调黑洞
  // db(`select name from category where Id=?`, req.body.cate_id, function(err, arr) {
  //   if (err != null) {
  //     res.send({ //无需设置请求头 ，和转换为JSON
  //       "status": 1,
  //       "message": "获取文章分类失败！",
  //     });
  //   }
  //   // 
  //   else {
  //     req.body.cate_name = arr[0].name;


  //     // 2.把数据添加数据库
  //     db(`insert into article set ?`, req.body, function(err) {
  //       if (err != null) {
  //         res.send({ //无需设置请求头 ，和转换为JSON
  //           "status": 1,
  //           "message": "新增文章失败！",
  //         });
  //       }
  //       // 
  //       else {
  //         res.send({
  //           "status": 0,
  //           "message": "新增文章成功！",
  //         });
  //       }
  //     });

  //   }
  // });




});


//    修改：
router.post("/edit", upload.single('cover_img'), async function(req, res) {


  req.body.cover_img = req.file.filename;
  req.body.pub_date = moment().format(' YYYY-MM-DD hh:mm:ss');
  req.body.author_id = req.user.userId;


  try {
    let arr = await fn(`select name from category where Id=?`, req.body.cate_id);
    req.body.cate_name = arr[0].name;
    await fn(`update article set ? where Id=?`, [req.body, req.body.Id]);
    res.send({
      "status": 0,
      "message": "修改文章成功！",
    });

  } catch (err) {
    res.send({
      "status": 1,
      "message": "修改文章失败！",
    });
  }



  // db(`select name from category where Id=?`, req.body.cate_id, function(err, arr) {
  //   if (err != null) {
  //     res.send({ //无需设置请求头 ，和转换为JSON
  //       "status": 1,
  //       "message": "修改失败！",
  //     });
  //   }
  //   // 
  //   else {
  //     req.body.cate_name = arr[0].name;


  //     // 2.把数据添加数据库
  //     db(`update article set ? where Id=?`, [req.body, req.body.Id], function(err) {
  //       if (err != null) {
  //         res.send({ //无需设置请求头 ，和转换为JSON
  //           "status": 1,
  //           "message": "修改文章失败！",
  //         });
  //       }
  //       // 
  //       else {
  //         res.send({
  //           "status": 0,
  //           "message": "修改文章成功！",
  //         });
  //       }
  //     });

  //   }
  // });
});


//    删除：设计动态路由，不是所有删除都是动态路由！最终设计由自己决定！
router.get("/delete/:id", function(req, res) {

  db(`delete from article where Id=?`, req.params.id, function(err) {
    if (err != null) {
      res.send({ // 无需设置请求头 ，和转换为JSON
        "status": 1,
        "message": "删除文章失败！",
      });
    }
    // 
    else {
      res.send({
        "status": 0,
        "message": "删除文章成功！",
      });
    }
  });

});


//    详情：获取某个文章里面具体内容
router.get("/one/:id", async function(req, res) {

  try {
    let arr = await fn(`select * from article where Id=?`, req.params.id);
    res.send({
      "status": 0,
      "message": "获取文章成功！",
      data: arr[0]
    });
  } catch (error) {
    res.send({
      "status": 1,
      "message": "获取文章失败！",
    });
  }



  // db(`select * from article where Id=?`, req.params.id, function(err, arr) {
  //   if (err != null) {
  //     res.send({
  //       "status": 1,
  //       "message": "获取文章失败！",
  //     });
  //   }
  //   // 
  //   else {
  //     res.send({
  //       "status": 0,
  //       "message": "获取文章成功！",
  //       data: arr[0]
  //     });
  //   }
  // });



});



//    列表:读取全部数据
router.get("/list", async function(req, res) {
  // 1.前端：页码n  每页显示多少条m;
  let n = req.query.pagenum * 1;
  let m = req.query.pagesize * 1;

  // 选择性传入
  let c = req.query.cate_id;
  let s = req.query.state;


  // let str1;
  // let Arr1;

  // let str2;
  // let Arr2;
  // if (c == undefined && s == undefined) {
  //   str1 = `select * from article where author_id=? limit ?,?`
  //   Arr1 = [req.user.userId, (n - 1) * m, m];

  //   str2 = `select count(*) as total from article where author_id=?`;
  //   Arr2 = req.user.userId;
  // }
  // // 
  // else if (c != undefined && s == undefined) {
  //   str1 = `select * from article where author_id=? and cate_id=? limit ?,?`;
  //   Arr1 = [req.user.userId, c, (n - 1) * m, m];

  //   str2 = `select count(*) as total from article where author_id=? and cate_id=?`;
  //   Arr2 = [req.user.userId, c];
  // }
  // // 
  // else if (c == undefined && s != undefined) {
  //   str1 = `select * from article where author_id=? and state=? limit ?,?`
  //   Arr1 = [req.user.userId, s, (n - 1) * m, m];


  //   str2 = `select count(*) as total from article where author_id=? and state=?`;
  //   Arr2 = [req.user.userId, s];
  // }
  // // 
  // else {
  //   str1 = `select * from article where author_id=? and cate_id=? and state=? limit ?,?`;
  //   Arr1 = [req.user.userId, c, s, (n - 1) * m, m];

  //   str2 = `select count(*) as total from article where author_id=? and cate_id=? and state=?`;
  //   Arr2 = [req.user.userId, c, s];
  // }


  let w = "";
  if (c != undefined) {
    w += `and cate_id=${c}`;
  }
  if (s != undefined) {
    w += `and state="${s}"`;
  }
  let str1 = `select * from article where author_id=? ${w} limit ?,?`;
  let str2 = `select count(*) as total from article where author_id=? ${w}`;


  // 2.查数据库找列表
  try {
    let arr = await fn(str1, [req.user.userId, (n - 1) * m, m]);
    let result = await fn(str2, req.user.userId);
    res.send({
      "status": 0,
      "message": "获取列表成功！",
      data: arr,
      total: result[0].total
    });


  } catch (error) {
    console.log(error);
    res.send({
      "status": 1,
      "message": "获取列表失败！",
    });
  }


  // db(`select * from article where author_id=? limit ?,?`, [req.user.userId, (n - 1) * m, m], function(err, arr) {
  //   if (err != null) {
  //     res.send({
  //       "status": 1,
  //       "message": "获取列表失败！",
  //     });
  //   }
  //   // 
  //   else {
  //     // 查询总数？
  //     db(`select count(*) as total from article where author_id=?`, req.user.userId, function(err, result) {
  //       if (err != null) {
  //         res.send({
  //           "status": 1,
  //           "message": "获取列表失败！",
  //         });
  //       }
  //       // 
  //       else {
  //         res.send({
  //           "status": 0,
  //           "message": "获取列表成功！",
  //           data: arr,
  //           total: result[0].total
  //         });
  //       }
  //     });



  //   }
  // });




});



module.exports = router;